﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Portal.Core;
using System.Collections.ObjectModel;
using Portal.Web.Global;
using Portal.Web.Framework;
using System.Data;
using Portal.AssetTn.Model;

namespace Portal.Gui.Web.WebParts.AssetTn
{
    public class AssetRenderPrintBll
    {
        public static string Render(
            string PrintSessionId,
            string Id,
            string FromWebPartId,
            string SiteId, 
            string AssetTypeId,
            string Subject,
            string AssetTypeImage,
            string MrtFile,
            bool   VisibleTitle,
            bool   VisibleSearchForm)
        {
            try
            {
                AjaxPro.Utility.RegisterTypeForAjax(typeof(AssetRenderPrintBll));
                ParamCls[] ItemsPrintParams = AssetViewFieldBll.GetPrintParams(SiteId, AssetTypeId);
                Collection<ParamCls> PrintParams = new Collection<ParamCls> { };
                for (int iIndex = 0; iIndex < ItemsPrintParams.Length; iIndex++)
                {
                    PrintParams.Add(ItemsPrintParams[iIndex]);
                }
                if (PrintParams.Count % 2 != 0) PrintParams.Add(null);
               
                string RetHtml =
                        " <script language=javascript>\r\n" +
                        "   function ClientResetPrint()\r\n" +
                        "   {\r\n" +
                        "       if(confirm('Bạn đã chắc chắn xóa điều kiện in chưa?')==false)return;\r\n";
                for (int iIndex = 0; iIndex < ItemsPrintParams.Length; iIndex++)
                {
                    RetHtml += "  document.getElementById('txtPrintField" + ItemsPrintParams[iIndex].Key + "').value='';\r\n";
                }
                RetHtml +=
                        "   }\r\n" +                        
                        "   function ClientPrint()\r\n" +
                        "   {\r\n" +
                        "       document.getElementById('divProcessing').innerHTML='Đang tìm kiếm dữ liệu trên máy chủ dịch vụ...';\r\n" +
                        "       setTimeout('RealClientPrint()',10);\r\n" +
                        "   }\r\n" +

                        "   function RealClientPrint()\r\n" +
                        "   {\r\n" +
                        "       SiteId='" + SiteId + "';\r\n" +
                        "       AssetTypeId='"+AssetTypeId+"';\r\n"+
                        "       SessionId='" + PrintSessionId + "';\r\n" +
                        "       WebPartId='" + FromWebPartId + "';\r\n" +
                        "       Max=" + ItemsPrintParams.Length + ";\r\n" +
                        //"       PageIndex = parseInt(document.getElementById('txtPrintPageIndex').value);\r\n" +
                        "       MrtFile='"+MrtFile+"';\r\n"+
                        "       AjaxOut=Portal.Gui.Web.WebParts.AssetTn.AssetRenderPrintBll.ServerSideGetParam(SiteId,AssetTypeId).value;\r\n" +
                        "       if(AjaxOut.Error)\r\n" +
                        "       {\r\n" +
                        "           alert(AjaxOut.InfoMessage);\r\n" +
                        "           return;\r\n" +
                        "       }\r\n" +
                        "       Params=AjaxOut.RetObject;\r\n" +
                        "       for(var iIndex=0;iIndex<Max;iIndex++)\r\n" +
                        "       {\r\n" +
                        "           Ids='txtPrintField'+Params[iIndex].Key;\r\n" +
                        "           v=document.getElementById(Ids).value;\r\n" +
                        "           Params[iIndex].Value=v;\r\n" +
                        "       }\r\n" +
                        "       SortField = 'SortInventoryNumber';\r\n" +//document.getElementById('drpSelectSortField').value;\r\n"+
                        "       AjaxOut = Portal.Gui.Web.WebParts.AssetTn.AssetRenderPrintBll.ServerSidePrint(SiteId, SessionId, AssetTypeId, WebPartId, Params, MrtFile, SortField).value;\r\n" +
                        "       document.getElementById('divProcessing').innerHTML='';\r\n" +
                        "       if(AjaxOut.Error)\r\n" +
                        "       {\r\n" +
                        "           alert(AjaxOut.InfoMessage);\r\n" +
                        "           return;\r\n" +
                        "       }\r\n" +
                        "       window.open(AjaxOut.RetUrl,'_self');\r\n" +
                        //"       document.getElementById('divPrintForm').style.display='none';\r\n" +
                        //      document.getElementById('buttonPrint').value='Hiện cửa sổ tìm kiếm';\r\n" +
                        "   }\r\n" +

                        "   function ClientShowHidenPrintForm()\r\n" +
                        "   {\r\n" +
                        "       if(document.getElementById('divPrintForm').style.display=='block')\r\n" +
                        "       {\r\n" +
                        "           document.getElementById('divPrintForm').style.display='none';\r\n" +
                        "           document.getElementById('buttonPrint').value='Hiện cửa sổ điều kiện in';\r\n" +
                        "       }\r\n" +
                        "       else\r\n" +
                        "       {\r\n" +
                        "           document.getElementById('divPrintForm').style.display='block';\r\n" +
                        "           document.getElementById('buttonPrint').value='Ẩn cửa sổ điều kiện in';\r\n" +
                        "       }\r\n" +
                        "   }\r\n" +

                        " </script>\r\n" +
                        " <div id=\"" + Id + "\"> \r\n" +
                        " <input id=txtLoadFromBackEnd value=\"0\" type=\"hidden\">\r\n" +
                        " <input id=txtPrintPageIndex value=\"0\" type=hidden>\r\n" +
                        " <table class=\"il_Block\" datatable=\"0\" style=\"width:960px;\">\r\n" +
                        " <tbody>\r\n";
                if (VisibleTitle)
                {
                    RetHtml +=
                        " <tr>\r\n" +
                        "     <td class=\"ilBlockHeaderBig\" colspan=\"1\">\r\n" +
                        "       <div style=\"float:left;\">\r\n" +
                        "         <h3 class=\"ilBlockHeader\"><a class=\"ilAccAnchor\" name=\"" + Id + "_blhead\" id=\"" + Id + "_blhead\">" + Subject + "</a></h3> <span id=\"" + Id + "_loader\"></span>\r\n" +
                        "       </div>\r\n" +
                        "     </td>\r\n" +
                        " </tr>\r\n";
                }

                string ButtonCaption = "Ẩn cửa sổ điều kiện in";
                string FormDisplayStyle = "display:block";
                if (VisibleSearchForm==false)
                {
                    ButtonCaption = "Hiện cửa sổ điều kiện in";
                    FormDisplayStyle = "display:none";
                }
                RetHtml +=
                        "   <tr class=\"tblrow1\">\r\n" +
                        "       <td class=\"std\"><div style=\"float:right;\"><img style=\"width:100px;\" border=\"0\" src=\"./templates/default/images/" + AssetTypeImage + "\"></div>\r\n" +
                        "       <h1>" + Subject + "<input type=button class=button style=\"float:right\" value=\""+ButtonCaption+"\" id=buttonPrint onclick=\"javascript:ClientShowHidenPrintForm();\"></h1>\r\n" +
                        "           <p>Để tìm kiếm theo tiêu chí nào nhập liệu vào ô tìm kiếm đó. Để trắng nếu muốn loại bỏ phạm vi in này:</p>\r\n" +
                        "           <div id=divPrintForm style=\"" + FormDisplayStyle + "\" class=CssFormSaveUpdate>\r\n" +
                        "           <table class=AdvanceSearchTable>\r\n";
                int IndexRecord = 0;
                while (true)
                {
                    //RetHtml += "  <tr>\r\n" +
                    //           "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                    //           "      <td class=c2><input id=\"txtPrintField" + PrintParams[IndexRecord].Key + "\" type=textbox class=textbox></td>\r\n";


                    string SelectLookUp = AssetUtility.GetLookUp(SiteId, PrintParams[IndexRecord].Key, "txtPrintField", PrintParams[IndexRecord].Value);
                    RetHtml += "<tr>\r\n";
                    if (!string.IsNullOrEmpty(SelectLookUp))
                    {
                        RetHtml +=
                               "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                               "      <td class=c2>" + SelectLookUp + "</td>\r\n";
                    }
                    else
                    {
                        RetHtml +=
                               "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                               "      <td class=c2><input id=\"txtPrintField" + PrintParams[IndexRecord].Key + "\" type=textbox class=textbox></td>\r\n";
                    }

                    IndexRecord = IndexRecord + 1;
                    if (IndexRecord == PrintParams.Count)
                    {
                        RetHtml +=
                               "      <td class=c1></td>\r\n" +
                               "      <td class=c2></td>\r\n";
                        break;
                    }
                    if (PrintParams[IndexRecord] != null)
                    {
                        //RetHtml +=
                        //       "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                        //       "      <td class=c2><input id=\"txtPrintField" + PrintParams[IndexRecord].Key + "\" type=textbox class=textbox></td>\r\n";

                        SelectLookUp = AssetUtility.GetLookUp(SiteId, PrintParams[IndexRecord].Key, "txtPrintField", PrintParams[IndexRecord].Value);
                        if (!string.IsNullOrEmpty(SelectLookUp))
                        {
                            RetHtml +=
                                   "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                                   "      <td class=c2>" + SelectLookUp + "</td>\r\n";
                        }
                        else
                        {
                            RetHtml +=
                                   "      <td class=c1>" + PrintParams[IndexRecord].Title + "</td>\r\n" +
                                   "      <td class=c2><input id=\"txtPrintField" + PrintParams[IndexRecord].Key + "\" type=textbox class=textbox></td>\r\n";
                        }
                    }
                    else
                    {
                        RetHtml +=
                               "      <td class=c1></td>\r\n" +
                               "      <td class=c2></td>\r\n";
                    }
                    RetHtml +=
                               "  </tr>\r\n";
                    IndexRecord++;
                    if (IndexRecord == PrintParams.Count) break;
                }
                RetHtml +=
                           //"  <tr>\r\n" +
                           //"      <td class=c1>Sắp xếp theo</td>\r\n" +
                           //"      <td class=c2 colspan=3>"+SelectSortBy+"</td>\r\n" +
                           //"  </tr>\r\n"+
                    
                           "  <tr>\r\n" +
                           "      <td class=c1></td>\r\n" +
                           "      <td class=c2 colspan=3><input type=button class=button value=\"Thực hiện xuất dữ liệu\" onclick=\"javascript:ClientPrint();\"><input type=button class=button value=\"Điều kiện tìm kiếm mới\" onclick=\"javascript:ClientResetPrint();\"></td>\r\n" +
                           "  </tr>\r\n";

                RetHtml += "</table>\r\n";
                RetHtml +=
                        "           <ul>\r\n" +
                        "               <li>Các từ khóa tìm kiếm cần có độ dài > 3 và có ý nghĩa. Các từ khóa này sẽ được lưu lại thông kê đưa vào các từ khóa thường xuyên tìm kiếm</li>\r\n" +
                        "               <li>Trong trường hợp bạn cần tìm kiếm đơn giản hơn có thể chuyển sang tìm kiếm đơn giản. Với chức năng tìm kiếm đơn giản hệ thống sẽ tìm kiếm nhanh chóng với kết quả gần nhất</li>\r\n" +
                        "               <li>Trong trường hợp tìm được kết quả bạn có thể xem chi tiết hiện vật, chỉnh sửa, xóa hiện vật đó nếu như có quyền truy cập đến chức năng này</li>\r\n" +
                        "           </ul>\r\n" +
                        "       </td>\r\n" +
                        "   </tr>\r\n" +
                        "  </tbody>\r\n" +
                        "</table>\r\n" +
                        "</div>\r\n" +
                        "</div>\r\n" +
                        "<div id=divProcessing></div>\r\n" +
                        "<div id=divPrintResult>\r\n" +
                        "</div>\r\n";

                return RetHtml;
            }
            catch (Exception ex)
            {
                return ex.Message.ToString();
            }
        }


        [AjaxPro.AjaxMethod]
        public AjaxReturn ServerSideGetParam(string SiteId,string AssetTypeId)
        {
            AjaxReturn oAjaxReturn = new AjaxReturn();

            try
            {
                oAjaxReturn.RetObject = AssetViewFieldBll.GetPrintParams(SiteId, AssetTypeId);
            }
            catch (Exception ex)
            {
                oAjaxReturn.Error = true;
                oAjaxReturn.InfoMessage = ex.Message.ToString();
            }
            return oAjaxReturn;
        }



        [AjaxPro.AjaxMethod]
        public AjaxReturn ServerSidePrint(
            string SiteId,
            string SessionId,
            string AssetTypeId,
            string WebPartId,
            ParamCls[] Params,
            string MrtFile,
            string SortField)
        {
            AjaxReturn oAjaxReturn = new AjaxReturn();
            try
            {
                //doan nay tim kiem
                Environments.CheckSessionTimeOut(true);
                DataSet dsResult = null;
                AssetModel[] AssetModels = AssetBll.Search(SiteId, AssetTypeId, Params, SortField,SortField,"ASC", ref dsResult);

                if (dsResult.Tables.Count == 0) throw new Exception("Không tìm thấy hiện vật thỏa mãn điều kiện in sổ!");
                dsResult.Tables[0].TableName = "TableAssetList";
                dsResult.DataSetName = "TableAssetList";
                ReportServiceBll.SaveData(SiteId, Environments.CurrentLoginUser.LoginName, dsResult, SessionId);
                oAjaxReturn.RetUrl = "Print.aspx?wpid=" + WebPartId + "&SessionId=" + SessionId + "&MrtFile=" + MrtFile;
            }
            catch (Exception ex)
            {
                oAjaxReturn.Error = true;
                oAjaxReturn.InfoMessage = ex.Message.ToString();
            }
            return oAjaxReturn;
        }

    }
}
